package week4.ww;
/**
 * Representatie van een wachtwoord. 
 * Practicumopgave Programmeren 1.
 * @author Rick Clement en Adriaan Dekker
 * @version $Revision: 1.3 $
 */
public class Wachtwoord {
	// ------------------ Instantievariabelen ----------------
	
	/**
	 * De standaard beginwaarde van een Wachtwoord. 
	 */
	private String wachtwoord;
	
	private Controleur controleur;
	public String beginwoord;
	
	// ------------------ Constructor ------------------------

	/**
	 * Construeert een <code>Wachtwoord</code> met standaard beginwaarde <code>BEGINWOORD</code>.
	 */
	public Wachtwoord() {
		this(new StandaardControleur());
	}

	/**
	 * Construeert een <code>Wachtwoord</code> met standaard beginwaarde <code>BEGINWOORD</code>.
	 */
	public Wachtwoord(Controleur controleur) {
		this.controleur = controleur;
		beginwoord = controleur.genereerWachtwoord();
		wachtwoord = beginwoord;
	}

	// ------------------ Aanvragen --------------------------
	
	/**
	 * Vraagt het beginwoord op.
	 */
	public String getBeginwoord() {
		return beginwoord;
	}
	
	// ------------------ Commando's --------------------------

	/**
	 * Test of een gegeven string een acceptabel wachtwoord is.
	 * Niet acceptabel is: een woord met minder dan 6 tekens of een woord dat een spatie bevat. 
	 * @param voorstel woord dat getest moet worden 
	 * @return <code>true</code> als <code>voorstel</code> acceptabel is
	 */
	public boolean acceptabel(String voorstel) {
		return voorstel.length() >= 6 && !voorstel.contains(" ");
	}

	/**
	 * Test of een gegeven woord gelijk is aan dit <code>Wachtwoord</code>. 
	 * @param test woord dat getest moet worden 
	 * @return <code>true</code> als <code>test</code> gelijk is aan het huidige wachtwoord
	 */
	public boolean testWoord(String test) {
		return wachtwoord.equals(test);
	}

	/**
	 * Verandert dit <code>Wachtwoord. 
	 * @require nieuw.length() >= 6 && !nieuw.contains(" ")
	 * @ensure this.wachtwoord == nieuw
	 * @param oud het huidige wachtwoord
	 * @param nieuw het nieuwe wachtwoord 
	 * @return <code>true als <code>oud gelijk is aan het huidige wachtwoord, en <code>nieuw een acceptabel wachtwoord is
	 */
	public boolean setWoord(String oud, String nieuw) {
		if (testWoord(oud) && acceptabel(nieuw)) {
			wachtwoord = nieuw;
			return true;
		} else return false;
	}
}